﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Windows;

namespace SisCRA.Config
{
    public static class InitialConfig
    {
        #region -Constants-

        private const string EMAIL_REGEX = @"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$";

        #endregion

        #region -Public Static Methods-

        /// <summary>
        /// Expressão regular para validação de e-mail.
        /// </summary>
        public static string EmailRegex
        {
            get { return EMAIL_REGEX; }
        }

        /// <summary>
        /// Método que verifica se é a primeira vez que a aplicação está sendo executada.
        /// </summary>
        /// <returns>True se for a primeira vez que a aplicação está sendo executada, caso contrário False</returns>
        public static bool IsFirstRun()
        {
            if (bool.Parse(AppConfig.ReadConfiguration(AppConfig.IsFirstRun)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Método que define a mensagem inicial da aplicação.
        /// </summary>
        /// <returns>Mensagem inicial da aplicação</returns>
        public static string Information()
        {
            return "Seja bem-vindo ao SisCRA - Sistema de Controle de Rendimento Acadêmico: " + 
                   "Este é o assistente de registro do sistema. Por favor, informe seu nome e e-mail " + 
                   "para poder ter acesso a todo o sistema e para que fique devidamente registrado em seu nome.\r\n\r\n" + 
                   "Obrigado.";
        }

        /// <summary>
        /// Método que realiza a configuração inicial da aplicação.
        /// </summary>
        /// <param name="appUser">Nome do usuário da aplicação</param>
        /// <param name="appUserEmail">E-mail do usuário da aplicação</param>
        /// <param name="appUserPassword">Senha do e-mail do usuário da aplicação</param>
        /// <param name="educationalSector">Nome do setor pedagógico</param>
        /// <param name="educationalSectorEmail">E-mail do setor pedagógico</param>
        /// <param name="path">Caminho do arquivo de criação do banco de dados da aplicação</param>
        public static void MakeInitialConfig(string appUser, string appUserEmail, string appUserPassword, string educationalSector, string educationalSectorEmail, string path)
        {
            try
            {
                ProcessStartInfo procInfo = new ProcessStartInfo();
                procInfo.FileName = @"cmd.exe";
                procInfo.Arguments = @"/c mysql -u" + AppConfig.ReadConfiguration(AppConfig.User) + " -p" + AppConfig.ReadConfiguration(AppConfig.Password) + " < " + "\"" + Path.GetDirectoryName(path) + @"\SisCRA.sql" + "\"";
                procInfo.WindowStyle = ProcessWindowStyle.Hidden;

                using (Process proc = Process.Start(procInfo))
                {
                    proc.WaitForExit();
                }

                AppConfig.WriteConfiguration(AppConfig.IsFirstRun, "false");

                AppConfig.WriteConfiguration(AppConfig.AppUser, appUser);
                AppConfig.WriteConfiguration(AppConfig.AppUserEmail, appUserEmail);
                AppConfig.WriteConfiguration(AppConfig.AppUserPassword, appUserPassword);
                
                AppConfig.WriteConfiguration(AppConfig.EducationalSector, educationalSector);
                AppConfig.WriteConfiguration(AppConfig.EducationalSectorEmail, educationalSectorEmail);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }
}
